Ce fichier montre les rĆ©sultats des questions du TP disponible ici. Jāai choisi de ne pas afficher tout le temps le code R que jāai Ć©crit pour rĆ©pondre aux questions. Les rĆ©sultats sont tous affichĆ©s dans le document. Le code R Markdown est disponible sur mon compte GitHub. Jāai utilisĆ© les donnĆ©es de Janvier 2020 pour les entreprises.
Ce TP consiste Ć travailler sur des donnĆ©es de la base Sirene de lāINSEE, mise Ć disposition sur data.gouv.fr, et qui rĆ©pertorie lāensemble des entreprises et Ć©tablissements actifs en France. Les mĆ©tadonnĆ©es associĆ©es Ć cette base sont en partie dĆ©crites dans ce tableau.
Pour réaliser ce TP, nous avons besoin de toutes les bibliothèques suivantes :
library(dplyr)
library(readr)
library(stringr)
library(purrr)
library(lubridate)
library(scales)
library(tidyr)
library(ggplot2)
library(sf)
library(plotly)
library(prettydoc)
library(rmdformats)TƩlƩchargez les donnƩes du dƩpartement 42, geo_siret_42.csv dans ce rƩpertoire pour le mois de Janvier 2020 et dƩzippez le dossier sur votre machine.
TĆ©lĆ©chargez la table qui renseigne les codes correspondant Ć lāActivitĆ© Principale de lāEtablissement (APE)APE_Type.csv
Depuis RStudio, crĆ©ez un projet qui comprendra lāensemble des donnĆ©es et documents nĆ©cessaires Ć rĆ©aliser lāensemble des traitements qui vous seront demandĆ©s pour ce TP.
CrƩez le data.frame data42 en lisant la table geo-siret_42.csv.
entreprises qui comprennent le terme āBOULANGERIEā dans leur nom.
Filtrez les lignes de data42 pour ne retenir que celles pour lesquelles lāAPE correspond aux commerces āalimentairesā -alimentation, boisson, restaurant, bar- (voir la liste contenue dans le fichier APE_Type).
Stockez le rƩsultat de ces opƩrations dans un objet alim42.
Réalisez une jointure entre data42_alim (variable codeAPE) et APE_Type (variable Code), de manière à compléter alim42 avec les types de commerces (variables Type et TypeAbreg).
Les trois communes comptant le plus de commerces alimentaires sont : SAINT-ETIENNE, ROANNE, SAINT-CHAMOND
Les communes ne comptant quāun seul commerce āalimentaireā sont au nombre de 17. Avec en dĆ©tail : BOYER, CEZAY, LA CHAPELLE-EN-LAFAYE, DEBATS RIVIERE DāORPRA, GREZIEUX-LE-FROMENTAL, JARNOSSE, LURE, PINAY, ROCHE, SAINTE-AGATHE-EN-DONZY, SAINT-LAURENT-ROCHEFORT, SAINT-PIERRE-LA-NOAILLE, SAINT-PRIEST-LA-VETRE, SAINT-SIXTE, SAINT-THOMAS-LA-GARDE, SOUTERNON, URBISE
Lorsquāil y a un seul commerce alimentaire dans une commune, celui-ci est de type Restaurants et services de restauration mobile.
morethan100commerces <- group_by(data42, codeCommuneEtablissement,
libelleCommuneEtablissement) %>% summarise(nb_commerces = n())
morethan100commerces <- filter(morethan100commerces, nb_commerces >=
100)Les communes de plus de 100 commerces sont ANDREZIEUX-BOUTHEON, LE CHAMBON-FEUGEROLLES, CHARLIEU, CHAZELLES-SUR-LYON, LE COTEAU, FEURS, FIRMINY, MONTBRISON, LA RICAMARIE, RIVE-DE-GIER, ROANNE, ROCHE-LA-MOLIERE, SAINT-CHAMOND, SAINT-ETIENNE, SAINT-PRIEST-EN-JAREZ, SAINT-JUST-SAINT-RAMBERT, LA TALAUDIERE
morethan10viandes <- filter(data42, TypeAbreg == "viande") %>%
group_by(codeCommuneEtablissement, libelleCommuneEtablissement) %>%
summarise(nb_commerces_viande = n())
morethan10viandes <- filter(morethan10viandes, nb_commerces_viande >=
10)Les communes qui ont plus de 10 commerces de type āviandeā sont FEURS, MONTBRISON, ROANNE, SAINT-ETIENNE, LA TALAUDIERE
On retrouve les 5 communes ayant plus de 10 commerces de type āviandeā dans les villes ayant plus de 100 commerces. On a donc la rĆ©ponse. Mais pour sāassurer, on peut rĆ©aliser une jointure entre les 2 tableaux :
more100commerces10viandes <- left_join(morethan10viandes, morethan100commerces,
by = c("codeCommuneEtablissement", "libelleCommuneEtablissement"))On retrouve le même résultat : FEURS, MONTBRISON, ROANNE, SAINT-ETIENNE, LA TALAUDIERE
A ce stade, votre script commence Ć ĆŖtre un peu long et (peut-ĆŖtre) un peu dĆ©sordonné⦠Ne serait-ce pas plus agrĆ©able de continuer votre projet sous la forme dāun rapport Rmarkdown? (Ne rĆ©pondez pas Ć cette question, elle est rhĆ©toriqueā¦).
CrĆ©ez un document ____.Rmd, structurez-le avec quelques titres, et rĆ©partissez les diffĆ©rents morceaux de code de votre script de maniĆØre pertinente dans diffĆ©rents chunks. Vous pouvez maintenant rĆ©diger des paragraphes en y intĆ©grant des Ć©lĆ©ments de rĆ©ponses aux questions posĆ©es prĆ©cĆ©demment. RĆ©digez un petit paragraphe pour nommer les 3 communes qui comptent le plus dāentreprises (exercice prĆ©cĆ©dent) en utilisant lāinsertion dāāinline chunksā.
Les 3 communes qui comptent le plus dāentreprises sont SAINT-ETIENNE, ROANNE, SAINT-CHAMOND.
A partir de maintenant, votre document de travail sera un document`___.Rmdā et non le script que vous avez crƩƩ initialementā¦
Pour obtenir la table alim42, vous avez rĆ©alisĆ© un certain nombre dāopĆ©rations. On voudrait rĆ©aliser lāensemble de ces opĆ©rations pour les 5 dĆ©partements suivants:
RĆ©utilisez les commandes que vous avez mises au point sur data42 pour Ć©crire une fonction get_clean_data() qui rĆ©alisera lāensemble de ces opĆ©rations sur le dĆ©partement de votre choix. Lāinput correspondra Ć un numĆ©ro de dĆ©partement (cāest-Ć -dire que vous pourrez utiliser la fonction en faisant, par exemple get_clean_data(ā01ā)).
Pour lire le fichier, il faudra indiquer son chemin⦠Pensez Ć rĆ©utiliser ce que vous venez dāapprendre sur les chaĆ®nes de caractĆØres pour reformer le chemin du fichier que vous intĆ©resse Ć partir du numĆ©ro de dĆ©partementā¦
Certaines chaĆ®nes de caractĆØre sont interprĆ©tĆ©es comme des chaĆ®nes de caractĆØre pour certains jeux de donnĆ©es (par exemple pour les codes postaux de lāAin, Ć cause du ā0ā en dĆ©but de chaĆ®ne) tandis quāelle est interprĆ©tĆ©e comme un numĆ©rique pour les autres jeux de donnĆ©es. Faites en sorte que votre fonction transforme bien cette variable pour quāelles soient toujours de classe ācharacterā en sortie (conversion par as.character()ā¦).
get_clean_data <- function(dept) {
dept <- as.character(dept)
print(dept)
# Read CSV file for dept
filename <- "data/geo_siret_XX.csv"
filename <- str_replace(filename, "X{2}", dept)
print(filename)
data <- read_csv(filename)
data <- mutate(data, Code = as.numeric(str_extract(activitePrincipaleEtablissement,
"^....")))
alim <- filter(data, Code %in% code_alim)
alim <- left_join(alim, APE_Type, by = "Code")
return(alim)
}A partir des 5 jeux de donnĆ©es obtenus vous crĆ©erez un seul et mĆŖme jeu de donnĆ©es alimRA_entr (donnĆ©es pour lāancienne rĆ©gion RhĆ“ne-Alpes, où 1 ligne=1 entreprise).
Vous pourrez si vous le souhaitez vous servir de la commande do.call(ārbindā,ā¦) ou bind_rows().
Rajoutez une variable departement (correspondant au numĆ©ro de dĆ©partement) Ć votre jeu de donnĆ©es alimRA_entr. Peut-ĆŖtre par des manipulations sur le code postal?ā¦
Vous avez dĆ» remarquer que lāexĆ©cution de lāĆ©tape prĆ©cĆ©dente prenait un peu de temps car les 5 fichiers geo-sirene lus sont trĆØs volumineux⦠En revanche la table alimRA_entr est de taille beaucoup plus raisonnable. Or, nous nāaurons besoin que de cette table pour la suite du projet. Pour Ć©viter dāexĆ©cuter cette Ć©tape chronophage Ć chaque fois que vous travaillerez sur ce projet:
Agrégez la table alimRA_entr par commune et type de commerce, pour créer une table alimRA_typeCom (où une ligne correspondra à un type de commerce pour une commune):
Quelles communes comptant plus de 100 commerces comptes au moins 5% de commerces de type āviandeā?
Les communes comptant plus de 100 commerces, dont les commerces de type ābarā reprĆ©sentent au moins 15% des commerces sont TREVOUX, BEAUREPAIRE, ROUSSILLON, SAINT-MARCELLIN, CHAMROUSSE, CHARLIEU, FIRMINY, ROANNE, BRIOUDE, LANGEAC, THIZY-LES-BOURGS.
Les communes comptant plus de 100 commerces, dont les commerces de type āviandeā reprĆ©sentent au moins 5% des commerces sont CHARLIEU, FEURS, MONTBRISON, LA TALAUDIERE, YSSINGEAUX, CORBAS.
Nous allons nous intƩresser aux dates de crƩation des entreprises de notre base alimRA_entr (variable dateCreationEtablissement).
Pour le moment, dateCreationEtablissement est considĆ©rĆ© comme une variable de type āchaĆ®ne de caractĆØresā. Pour faire comprendre Ć R quāil sāagit en rĆ©alitĆ© dāune date (et lui faire comprendre comment elle est mise en forme) nous allons faire appel au package lubridate.
Installez et chargez le package lubridate.
Transformez le tableau alimRA_entr en modifiant la classe de dateCreationEtablissement Ć lāaide dāune fonction de lubridate.
Ajoutez une variable annee au tableau alimRA_entr Ć lāaide, Ć nouveau, dāune des fonctions de lubridate.
CrĆ©ez une table alimRA_typeAn qui recense le nombre dāentreprises par annĆ©e (nInAn), et par type*annĆ©e (nInTypeAn).
Filtrez les donnƩes de alimRA_typeAn pour ne garder que les entreprises dont la crƩation correspond aux annƩes >=1970.
On peut aussi sƩparer les types de commerce et crƩer une grille avec un graphique pour chaque type :
Repartez de la table alim_entr pour en faire un objet de classe āsfā. Vous vous servirez pour cela des colonnes ālongitudeā et ālatitudeā et exclurez les entreprises pour lesquelles ces colonnes ne sont pas renseignĆ©es.
Réalisez une carte montrant le semis de points correspondant aux boulangeries-pâtisseries.
On crĆ©e une fonction pour afficher les commerces dāun dĆ©partement
On peut afficher les boulangeries-pâtisseries avec leur année de création, par département :
## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
##
## [[5]]
On affiche maintenant les dĆ©partements de lāĆ©tude Ć partir du fichier SHP rĆ©cupĆ©rĆ© prĆ©cĆ©demment :
Joignez aux communes les informations concernant les commerces (st_join()ā¦) et calculez le nombre de commerces par commune.
Produisez une carte montrant le nombre de commerces par commune. Vous aurez sans doute Ć retravailler lāĆ©chelle colorĆ©eā¦
On crĆ©e une fonction pour afficher le nombre de commerces par commune dāun dĆ©partement.
Puis on affiche les rƩsultats :
## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
##
## [[5]]